home *** CD-ROM | disk | FTP | other *** search
-
- /*
- コンピューターのターンのサブルーチン
-
- By 五味
- */
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <sub.h>
-
- void get_tre(void);
- int battle(void);
-
- /* 変数表
-
- xx ロングバッファ
- yy 〃
- zz 〃
- thp 敵の生命力(HP)
- */
-
- extern int turn,gold,f,i,j,o,k[],hp[],x[],y[],tx[],ty[];
- extern int mx[],my[],ht[],th[],dhp[],s[],bx[],by[],be[];
- extern char c,*nn[],*tt[];
- long xx,yy,zz;
- int thp,b;
-
- char *bossmes[]={
- " ネイヴ「地獄の業火で焼き尽くしてくれる!」\n\n",
- " アウチストマック「この俺が誰だと知っていて、戦おうと言うのか?」\n\n",
- " リュート「私の召び出す精霊たちを破れますか?」\n\n",
- " フェネス「戦っても無駄だって言っているんだよ。」\n\n",
- " トゥースエイク「僕の剣さばきに踊ってみるかい?」\n\n"
- };
-
- com_turn()
- {
-
- printf(" 各部隊、行動に移ります。\n\n");
-
- f=0;
- for( i=0 ; i<100 ; i++ )
- {
-
- /*
-
- 移動処理
-
- */
-
- if( k[i]!=-1 )
- {
- f++;
- xx =mx[i]-x[i];
- yy =my[i]-y[i];
- zz =s[k[i]];
- zz *=zz;
- /*
- printf(" 第%2d部隊 %-16s 座標(%3d,%3d) 目的地(%3d,%3d)\n",i+1,nn[k[i]],x[i],y[i],mx[i],my[i]);
- */
- if( ((xx*xx)+(yy*yy))<zz )
- {
- x[i] = mx[i];
- y[i] = my[i];
- }
- else
- {
- x[i] +=(int)(xx*(long)s[k[i]]/(labs(xx)+labs(yy)));
- y[i] +=(int)(yy*(long)s[k[i]]/(labs(xx)+labs(yy)));
- }
- }
-
- /*
-
- ワンダリング・エネミーとの遭遇
-
- */
-
- if( k[i]!=-1 && random(10)==0 )
- {
- j = random(20);
- printf(" 第%2d部隊の%sが、敵の%sと遭遇したようです!\n\n",i+1,nn[k[i]],nn[j]);
- getch();
- thp = dhp[j];
-
- b=0;
- battle(); /* battle.c */
-
- }
-
- /*
-
- 砦の攻防
-
- */
-
- if( k[i]!=-1 )
- {
- for( j=0 ; j<5 ; j++ )
- {
- xx =tx[j]-x[i];
- yy =ty[j]-y[i];
- if( ((xx*xx)+(yy*yy))<100 )
- {
- if( ht[j] == 0 )
- {
- printf(" 第%2d部隊の%sが、敵の砦を発見したそうです!\n\n",i+1,nn[k[i]]);
- getch();
- printf(" 砦の城主は、どうやら%sのようです。\n",nn[j+20]);
- printf(" 取り合えず攻撃はしません。\n\n");
- getch();
- ht[j]=1;
- }
- else
- {
- if( th[j] == 0 )
- {
- printf(" 第%2d部隊の%sが、敵の砦を捕捉し、攻撃に移ったとの事です。\n\n",i+1,nn[k[i]]);
- printf(bossmes[j]);
- thp=dhp[j+20];
- b=1;
- if( battle() == 1 )
- {
- printf(" 砦が落ちました!\n\n");
- th[j]=1;
- o=0;
- for( b=0 ; b<5 ; b++ )
- {
- if( th[b] == 1 )
- o++;
- }
- if( o == 5 )
- return(2);
-
- break;
- }
- dhp[j+20]=thp;
- }
- }
- }
- }
- }
-
-
- /*
-
- 宝発見チェック
-
- */
-
- get_tre(); /* get_tre.c */
-
-
-
- if( k[i]!=-1 )
- {
- if( x[i]==mx[i] && y[i]==my[i] )
- {
- printf(" 第%2d部隊の%sが、目的地についたと報告してきました。\n",i+1,nn[k[i]]);
- printf(" 解雇しますか?(y/n)");
- c = getch();
- if( c=='y' || c=='Y' )
- {
- printf("\n\n %sを解雇しました。\n\n",nn[k[i]]);
- k[i] = -1;
- getch();
- }
- else
- {
- do
- {
- printf("\n\n %sを、どこへ向かわせますか?\n",nn[k[i]]);
- printf(" 現在位置は(%3d,%3d)です。\n\n",x[i],y[i]);
-
- do {
- printf("\tX座標(0~200)=");
- j = getnum();
- printf("\n");
- }while( j<0 || j>200 );
- mx[i] = j;
-
- do {
- printf("\tY座標(0~200)=");
- j = getnum();
- printf("\n");
- }while( j<0 || j>200 );
- my[i] = j;
-
- printf("\n これでいいですか?(キャンセルは0)");
-
- }while( getch() == '0' );
-
- printf("\n\n");
- }
- }
- }
-
-
-
- }
-
- if( f == 0 )
- {
- printf(" この城に所属している部隊がありません。\n");
- if( gold < 5 )
- {
- printf(" もはや、この城には、傭兵を雇う資金もありません。\n");
- printf(" 残念ですが、このままファブル軍団をのさばらせておくしか無いでしょう。しかし、いつかはこの城に攻めてくるでしょう…。\n\n");
- printf(" GAME OVER\n");
-
- getch();
- return(1);
- }
- else
- {
- printf(" 誰かを雇わないと、ゲームが進みませんよ。\n\n");
- return(0);
- }
- }
-
- turn++;
- return(0);
- }
-